#ifndef _CONVENTION_H
#define _CONVENTION_H
#include "ConventionItem.h"
#include <vector>

class SymbolBase;
class IdentifierList;

class Conventions
{
protected: 
	Conventions();
public:
	virtual ~Conventions(void);

	static Conventions &				getInstance();

	void								addConvention(ConventionItem * pConvention);

	void								addDefinedToken(IdentifierList *pDefinedToken);

	void								addTypedToken(SymbolBase *pType, IdentifierList *pTokens);
protected:

	typedef std::vector<SymbolBase *>	IdentifierContainer;

	typedef std::pair<SymbolBase *, IdentifierContainer *>		TypeIdentifiersPair;

	typedef std::vector<TypeIdentifiersPair>					TypeIdentifierContainer;


	std::vector<ConventionItem *>		m_oConventions;

	std::vector<SymbolBase *>			m_oDefinedTokens;

	TypeIdentifierContainer				m_oTypedTokens;
	
	static Conventions *				s_pInstance;
};

#endif
